﻿using System.Reflection;
using System;
namespace Server.Properties {
    
    
    // 通过此类可以处理设置类的特定事件:
    //  在更改某个设置的值之前将引发 SettingChanging 事件。
    //  在更改某个设置的值之后将引发 PropertyChanged 事件。
    //  在加载设置值之后将引发 SettingsLoaded 事件。
    //  在保存设置值之前将引发 SettingsSaving 事件。
    internal sealed partial class Settings {
        
        public Settings() {
            // // 若要为保存和更改设置添加事件处理程序，请取消注释下列行:
            //
            // this.SettingChanging += this.SettingChangingEventHandler;
            //
            this.SettingsSaving += this.SettingsSavingEventHandler;
            //
        }
        
        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
            // 在此处添加用于处理 SettingChangingEvent 事件的代码。
        }
        
        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
            string configFileName = AppDomain.CurrentDomain.BaseDirectory + ".config";
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
            doc.Load(configFileName);
            string configString = @"configuration/userSettings/Server.Properties.Settings/setting[@name='{0}']/value";
            PropertyInfo[] configNodes = Default.GetType().GetProperties();
            System.Xml.XmlNode configNode;
            for (int i = 0; i < configNodes.Length; i++)
            {
                configNode = doc.SelectSingleNode(string.Format(configString, configNodes[i].Name));
                if (configNode != null)
                {
                    configNode.InnerText = Convert.ToString(configNodes[i].GetValue(Default, null));
                }
            }
        }
    }
}
